Hypertext transfer protocol (HTTP) is an application-level protocol for retrieving interlinked resources, such as Web pages, on the World Wide Web. HTTP specifies the standard for requests and responses between a client and a server. Examples of HTTP clients include Web browsers, Web crawlers, and other end-user software tools that make requests on behalf of users in accordance with the HTTP standard. Examples of HTTP servers include Web servers hosting Web pages and servers of other internet resources that respond to HTTP requests.
Typically, when an HTTP client initiates an HTTP request, it first establishes a transmission control protocol (TCP) connection to a dedicated port on an HTTP server. TCP connection establishment uses a three-way handshake. First the client initiates the connection establishment by sending a connection request to the server. In response, the server replies with an acknowledgement of the connection request. Finally, the client sends an acknowledgement back to the server for the receipt of the server's acknowledgement. At this point, the TCP connection between the client and the server is established, and the client and server can begin data transfer to each other through the established TCP connection.
In contrast to TCP, user datagram protocol (UDP) is a message-based connectionless protocol that does not require hand-shaking dialogues for guaranteeing reliability, ordering, or data integrity. With UDP, applications can send messages, in this case referred to as datagrams, to other hosts on an Internet protocol (IP) network without requiring prior communications to set up special transmission channels or data paths. However, certain network configurations prevent the use of UDP to the Internet. In addition, some network configurations prevent direct TCP connections to the Internet as well. Some network configurations may only allow HTTP communication to the Internet if the HTTP communication is done through a HTTP Proxy. These network configurations are often implemented using a firewall. In such a situation, there has been a lack of efficient mechanisms for exchanging UDP packets between two endpoints.